<html>
<head>
<link rel="shortcut icon" href="./favicon.ico">
<link rel="stylesheet" type="text/css" href="./style.css">
<link rel="canonical" href="./links.html">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Links to other good ressources for digital design and Verilog coding.">
<title>Useful Links</title>
</head>
<body>

<h1>Useful Links</h1>

<ul>
    <li>Ken Shirriff's <a href="https://www.righto.com/2018/03/implementing-fizzbuzz-on-fpga.html">Implementing FizzBuzz on an FPGA </a> and the sequel <a href="https://www.righto.com/2018/04/fizzbuzz-hard-way-generating-vga-video.html">Using an FPGA to generate raw VGA video:FizzBuzz with animation</a> are a wonderful, detailed, and nitty-gritty view into his entry into FPGA design where he solves a known problem in straight hardware rather than software.
    <li>Jan Gray's <a href="https://fpgacpu.wordpress.com/">FPGA CPU News</a> (and the predecessor at <a href="http://www.fpgacpu.org/">fpgacpu.org</a>)
    <li>James Hague's <a href="https://prog21.dadgum.com/">programming in the twenty-first century</a> (The sanest computing blog. Read it all, but <a href="https://prog21.dadgum.com/173.html">"Stumbling Into the Cold Expanse of Real Programming"</a> has particular relevance for FPGA system design.)
    <li>Henry Wong's <a href="https://hdlbits.01xz.net/wiki/Main_Page">HDLBits</a> provides an interactive tutorial and sandbox for learning Verilog, with on-the-fly simulation and grading.
    <li>Yossi Kreinin's <a href="https://www.embeddedrelated.com/showarticle/195.php">How FPGAs work, and why you'll buy one</a> explains the strengths of FPGAs: architectural flexibility and parallelism where you need it. He doesn't name it as such, but his description of how "instructions" work on FPGAs as opposed to on CPUs is about how the former execute the work more directly rather than interpreting a description of the work itself (i.e.: the software).
    <li><a href="https://mobile.twitter.com/plessl">Christian Plessl</a>'s <a href="https://www.slideshare.net/ChristianPlessl1/fpgaaccelerated-highperformance-computing-close-to-breakthrough-or-pipedream">FPGA-accelerated High-Performance Computing Close to Breakthrough or Pipedream?</a> and <a href="https://h2rc.cse.sc.edu/2018/02_plessl.pdf">Bringing FPGAs to HPC Production
Systems and Codes</a> are specific to HPC, but do a great job of explaining the obstacles to "selling" FPGAs as computing solutions.
    <li>Cliff Cummings' <a href="http://www.sunburst-design.com/papers/">Award-Winning Verilog & SystemVerilog Papers</a> are a goldmine of fundamental and advanced design topics. All are worth reading, even if some are aimed at ASIC tools and/or advocate design styles one could disagree with. For example:
    <ul>
        <li><a href="http://www.sunburst-design.com/papers/CummingsSNUG2001SJ_AsyncClk.pdf">Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs</a> and <a href="http://www.sunburst-design.com/papers/CummingsSNUG2008Boston_CDC.pdf">Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog</a> both discuss CDC in great depth. In my experience, CDC is more often than not discussed superficially and gotten wrong in digital design. I have written a smaller introduction to the topic where I also discuss my own mistakes in CDC system design: <a href="https://fpgacpu.ca/fpga/cdc_slow_fast.html">Basic CDC: Slow &rarr; Fast</a>.
        <li><a href="http://www.sunburst-design.com/papers/CummingsHDLCON2002_Parameters.pdf">New Verilog-2001 Techniques for Creating Parameterized Models (or Down With `define and Death of a defparam!)</a> argues well about not using <code>defparam</code>, which has caused me a lot of grief in a commercial design, where it hid a difference in behaviour between simulation and synthesis (and thus in emulation, down the line).
        <li><a href="http://www.sunburst-design.com/papers/CummingsHDLCON2002_SystemVerilogPorts.pdf">SystemVerilog Ports & Data Types For Simple, Efficient and Enhanced HDL Modeling</a> on the other hand, argues for never using <code>`default_nettype none</code>, which I completely disagree with. I find it better to keep code concise to avoid bugs via extensive modularization and re-use, rather than lines-of-code count.
    </ul>
    <li>Avrum Warshawsky of <a href="https://www.hardent.com/">Hardent</a> has posted extensively on the Xilinx Forums (as "avrumw") about CDC and how to properly apply constraints on these cases. Colm Ryan has collected some posts at <a href="https://www.colmryan.org/posts/avrum-cdc-wisdom/">Avrum's Clock Domain Crossing Widsom</a>.
    <li>dirjud's <a href="https://github.com/dirjud/Nitro-Parts-lib-Xilinx">library of Verilator-compatible Xilinx primitives</a>.
</ul>

<hr><a href="./index.html">Back to FPGA Design Elements</a>
</body>
</html>
